from pyecharts import options as opts
from pyecharts.charts import Graph
# sheet1数据
list_nodes = [
    {'name': '贾母', 'category': '第一代'},
    {'name': '贾赦', 'category': '第二代'},
    {'name': '贾政', 'category': '第二代'},
    {'name': '王夫人', 'category': '第二代'},
    {'name': '邢夫人', 'category': '第二代'},
    {'name': '贾宝玉', 'category': '第三代'},
    {'name': '林黛玉', 'category': '第三代'},
    {'name': '薛宝钗', 'category': '第三代'}
]

# sheet2数据
list_links = [
    {'source': '贾母', 'target': '贾赦', 'value': '母子'},
    {'source': '贾母', 'target': '贾政', 'value': '母子'},
    {'source': '贾母', 'target': '贾宝玉', 'value': '祖孙'},
    {'source': '贾母', 'target': '林黛玉', 'value': '外祖孙'},
    {'source': '贾政', 'target': '王夫人', 'value': '夫妻'},
    {'source': '贾赦', 'target': '邢夫人', 'value': '夫妻'},
    {'source': '贾赦', 'target': '贾政', 'value': '兄弟'},
    {'source': '贾政', 'target': '贾宝玉', 'value': '父子'},
    {'source': '贾政', 'target': '林黛玉', 'value': '舅甥'},
    {'source': '贾赦', 'target': '林黛玉', 'value': '舅甥'},
    {'source': '王夫人', 'target': '薛宝钗', 'value': '姨甥'},
    {'source': '邢夫人', 'target': '王夫人', 'value': '妯娌'},
    {'source': '王夫人', 'target': '贾宝玉', 'value': '母子'},
    {'source': '贾宝玉', 'target': '林黛玉', 'value': '表兄妹'},
    {'source': '薛宝钗', 'target': '贾宝玉', 'value': '表姐弟'},
]

# sheet3数据
list_categorys = [
    {'name': '第一代', 'symbolSize': 50},
    {'name': '第二代', 'symbolSize': 40},
    {'name': '第三代', 'symbolSize': 30}
]
graph=Graph(init_opts=opts.InitOpts(
    width='750px',height='700px',page_title='关系图'
))
graph.add(series_name='',nodes=list_nodes,links=list_links,
          categories=list_categorys,repulsion=8000,
          edge_label=opts.LabelOpts(
              position='middle',formatter='{b} {c}'
          ))
graph.set_global_opts(
    title_opts=opts.TitleOpts(
        title='《红楼梦》中部分任务关系图',pos_left='center'),
    legend_opts=opts.LegendOpts(
        pos_top='50%',pos_right='1%',orient='vertical')
    )
graph.render('例8-3.html')